import SparkMD5 from 'spark-md5'

/**
 * 用于创建文件块
 * @param {File} file 文件对象
 * @param {number} index 当前块的索引
 * @param {number} chunkSize 分块大小
 * @returns
 */
export function createChunk(file, index, chunkSize) {
  // 返回一个Promise对象
  return new Promise((resolve) => {
    // 计算当前块的起始位置
    const start = index * chunkSize
    // 计算当前块的结束位置
    const end = start + chunkSize > file.size ? file.size : start + chunkSize
    // 创建一个SparkMD5对象，用于计算文件的MD5值
    const spark = new SparkMD5.ArrayBuffer()
    // 创建一个FileReader对象，用于读取文件
    const fileReader = new FileReader()
    // 获取当前块的文件数据
    const blob = file.slice(start, end)
    // 当文件读取完成时，执行回调函数
    fileReader.onload = (e) => {
      // 将读取到的文件内容添加到spark对象中
      spark.append(e.target.result)
      // 解析文件数据，并返回一个包含文件块信息、MD5值和文件数据的对象
      resolve({
        start,
        end,
        index,
        hash: spark.end(),
        blob
      })
    }
    // 以ArrayBuffer的形式读取文件数据
    fileReader.readAsArrayBuffer(blob)
  })
}
